home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / doom / axxwar_1.zip / SOURCES / SEEKER.QC < prev    next >
Text File  |  1997-03-13  |  3KB  |  151 lines

  1. // AxxWars 0.8
  2.  
  3.  
  4. /*
  5. ==========
  6. W_FireHome
  7. ==========
  8. */
  9. void()   HomeThink;
  10. entity() HomeFindTarget;
  11. float(entity targ) visible;
  12. float(entity targ) infront;
  13.  
  14. void() W_FireHome =
  15. {
  16.     local    entity missile, mpuff;
  17.     
  18.     if (self.ammo_rockets < 5)
  19.         {    
  20.         // AXXAF START
  21.             self.PW_prevweapon = self.weapon;
  22.         // AXXAF END
  23.         self.weapon = IT_ROCKET_LAUNCHER;
  24.         W_SetCurrentAmmo ();
  25.         return;
  26.         }
  27.  
  28.     
  29.     self.currentammo = self.ammo_rockets = self.ammo_rockets - 5;
  30.         
  31.     sound (self, CHAN_WEAPON, "weapons/sgun2.wav", 1, ATTN_NORM);
  32.  
  33.     self.punchangle_x = -2;
  34.  
  35.     missile = spawn ();
  36.     missile.owner = self;
  37.     missile.movetype = MOVETYPE_FLYMISSILE;
  38.     missile.solid = SOLID_BBOX;
  39.         
  40. // set missile speed    
  41.  
  42.     makevectors (self.v_angle);
  43.     missile.velocity = aim(self, 1000);
  44.     missile.velocity = (missile.velocity * 250);
  45.     missile.angles = vectoangles(missile.velocity);
  46.     
  47.     missile.touch = T_MissileTouch;
  48.     
  49. // set missile duration
  50.  
  51.     missile.nextthink = time + 0.2;
  52.     missile.think = HomeThink;
  53.     missile.enemy = world;
  54.     missile.classname = "seeker";
  55.  
  56.     setmodel (missile, "progs/missile.mdl");
  57.     setsize (missile, '0 0 0', '0 0 0');        
  58.     setorigin (missile, self.origin + v_forward*8 + '0 0 16');
  59.  
  60.  
  61. };
  62.  
  63. /*
  64. ===========
  65. Homeinfront 
  66. ===========
  67. */
  68. float(entity targ) Homeinfront =
  69. // returns 1 if the entity is in front (in sight) of self
  70.  
  71. {
  72.     local vector    vec;
  73.     local float        dot;
  74.     
  75.     makevectors (self.angles);
  76.     vec = normalize (targ.origin - self.origin);
  77.     dot = vec * v_forward;
  78.     
  79.     if ( dot > 0.5)  // raise this number for more specific infront
  80.     {
  81.         return TRUE;
  82.     }
  83.     return FALSE;
  84. };
  85.  
  86. /*
  87. ==============
  88. HomeFindTarget 
  89. ==============
  90. */
  91. entity() HomeFindTarget = 
  92. {
  93.     local entity head, selected;
  94.     local float dist;
  95.     dist = 100000;
  96.     selected = world;
  97.     head = findradius(self.origin, 100000);
  98.     while(head)
  99.         {
  100.         if( (head.health > 1) && (head != self) )
  101.             {
  102.             traceline(self.origin,head.origin,TRUE,self);
  103.             if ( Homeinfront(head) && (trace_fraction >= 1) && (vlen(head.origin - self.origin) < dist) 
  104.             && (head.classname != "door" && (head.classname != "backpack") && (head.classname != "dog_food") ) )
  105.                 {
  106.                 selected = head;
  107.                 dist = vlen(head.origin - self.origin);
  108.                 }
  109.             }        
  110.         head = head.chain;
  111.         }
  112.  
  113.     if (selected != world) 
  114.         {    
  115.         sprint (self.owner,"Seeking->");
  116.         if (selected.classname == "player")
  117.             {    
  118.             sprint (self.owner,selected.netname);
  119.             sprint (selected,self.owner.netname);
  120.             sprint (selected," has a bogey on you!\n");
  121.             }
  122.         else
  123.             sprint (self.owner,selected.classname);
  124.             sprint (self.owner,"\n");
  125.         }
  126.     return selected;
  127. };
  128.  
  129. /*
  130. =========
  131. HomeThink 
  132. =========
  133. */
  134. void() HomeThink =
  135. {
  136.     local vector dir, vtemp;
  137.  
  138.     self.enemy = HomeFindTarget();
  139.  
  140.     if (self.enemy != world) // Arr.. don't be taken on da World!
  141.     {
  142.         vtemp = self.enemy.origin + '0 0 10';
  143.         dir = normalize(vtemp - self.origin);
  144.         self.velocity = self.velocity + (dir * 500);
  145.         self.angles = vectoangles(self.velocity);
  146.     }
  147.  
  148.     self.nextthink = time + 0.2;
  149.     self.think=HomeThink;
  150. };
  151.